『Functional Design and Architecture』
https://gyazo.com/ce253a663988325a854b853fc8f51552
2023/10/31
second edition
無料で序盤の方が読める
作者が強そう
1 WHAT IS SOFTWARE DESIGN? ▼
1.1 Software design
1.1.1 Requirements, goals, and simplicity
1.1.2 Essential and accidental complexity
1.1.3 Low coupling, high cohesion
1.2 Design in mainstream paradigms
1.2.1 Imperative design
1.2.2 Object-oriented design
1.2.3 Object-oriented design principles
1.2.4 Shifting to functional programming
1.3 Software design in functional languages
1.3.1 Immutability, purity, and determinism
1.3.2 Strong static type systems
1.3.3 Functional patterns, idioms, and thinking
1.4 Summary
2 THE BASICS OF FUNCTIONAL DECLARATIVE DESIGN ▾
2.1 The engineering approach
2.1.1 Software architecture classification
2.1.2 2Design tools and abstractions
2.1.3 Top-down iterative development process
2.1.4 Collecting requirements
2.1.5 Requirements in mind maps
2.2 Application architecture
2.2.1 Architecture layers
2.2.2 Embedded domain-specific languages
2.2.3 Modularization of applications
2.3 Summary
PART 2: MINIMUM VIABLE PRODUCT
3 DRAFTING THE MVP APPLICATION -
3.1 Goals, requirements, and plans
3.1.1 Minimum viable product
3.1.2 Andromeda software requirements
3.1.3 The Hardware subsystem
3.1.4 Logic control scripts
3.2 Designing the architecture
3.2.1 Defining architecture components
3.2.2 Defining modules, subsystems, and relations
3.2.3 Defining the application architecture
3.2.4 Modules organization
3.3 Naive implementations of the Hardware subsystem
3.3.1 The structure of the Hardware subsystem
3.3.2 Algebraic definition of HDL
3.3.3 Functional interface to the Hardware subsystem
3.4 Summary
✓4 END-TO-END DESIGN
4.1 Finding the place for the end-to-end design
4.1.1 Identifying and fixing wrong dependencies
4.1.2 Improving models and naming
4.1.3 Improving the Hdl language and interpreter
4.1.4 Tests as a final consumer
4.2 Functional services
4.2.1 Layers and sublayers
4.2.3 Hardware service
4.2.4 Mocking with the Service Handle pattern
4.2.5 Type class powered Service Handle
4.3 Summary
PART 3: DOMAIN-DRIVEN DESIGN
✓5 EMBEDDED DOMAIN-SPECIFIC LANGUAGES ▾
5.1 Approaching embedded DSLS
5.1.1 Everything is an eDSL
5.1.2 Domain-specific versus domain-centric
5.2 Modeling eDSLs with algebraic data types
5.2.1 Clarifying the requirements
5.2.2 Modeling eDSLs with ADTS
5.2.3 Modeling multiple interacting eDSLs
5.2.4 Decoupling languages with parameterized ADTS
5.3 Implementation of eDSLs
5.3.1 Runtime objects and lifetimes
5.3.2 Impure stateful interpreters
5.4 Summary
✔ 6 DOMAIN MODELING WITH FREE MONADS ▾
6.1 Free monads overview
6.1.1 The Free monad pattern
6.1.2 Free monads versus 10
6.2 How Free monads work
6.2.1 Wrapping languages into the Free monad
6.2.2 The Functor instance for the Free monad
6.2.3 Learning the recursive Free type
6.2.4 Interpretation of Free monadic scripts
6.3 Free monadic eDSLs
6.3.1 Redesigning eDSLs with Free monads
6.3.2 Advantages and disadvantages of a free language
6.4 Summary
PART 4: STATEFUL AND REACTIVE APPLICATIONS
☐7 APPLICATION STATE
☐ 8 REACTIVE APPLICATIONS
PART 5: DESIGNING REAL-WORLD SOFTWARE
9 MULTITHREADING AND CONCURRENCY
10 PERSISTENCE
11 BUSINESS LOGIC DESIGN
12 TESTING
APPENDIXES
APPENDIX A: PLENTY OF MONADS
APPENDIX B: LAYERING SUBSYSTEMS WITH A MONADIC STACK
APPENDIX C: WORD STATISTICS EXAMPLE WITH MONAD TRANSFORMERS
APPENDIX D: APPLICATION ARCHITECTURES IN HASKELL AND SCALA
☐ APPENDIX E: THE MVAR REQUEST-RESPONSE PATTERN
☐ APPENDIX F: FREE MONADIC EDSL FOR AN INTERACTIVE FICTION GAME
APPENDIX G: HASKELL AND PURESCRIPT